/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package modules.enderecamento.bo;

import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import modules.enderecamento.models.dao.UsuarioDAO;
import modules.enderecamento.models.dto.Usuario;
import modules.enderecamento.security.Codec;
import modules.enderecamento.util.BoxPanel;
import modules.enderecamento.util.Funcoes;
import modules.enderecamento.validation.Validation;

/**
 *
 * @author Clezio
 */
public class UsuarioBO {
    public boolean save(Usuario usuario){
        try{
            Validation.getInstance().valid(usuario);
            if(Validation.getInstance().hasErrors()){
                BoxPanel.showMessageError(Funcoes.getListErros(Validation.getInstance().getErros()));
                return false;
            }else{
                usuario.setSenha(Codec.encodeBASE64(usuario.getSenha()));
                new UsuarioDAO().save(usuario);
                return true;
            }
        }catch(Exception e){
            BoxPanel.showMessageDialog(null,"Não foi possível salvar Usuário. Por favor, tente novamente.");
            Funcoes.registrarLog(e);
        }
        return false;
    }

    public List<Usuario> getList(String sql){
        try{
            return new UsuarioDAO().getList(sql);
        }catch(Exception e){
            BoxPanel.showMessageDialog(null,"Não foi possível listar Usuários.");
            Funcoes.registrarLog(e);
        }
        return null;
    }

    public Usuario retrieve(Integer pk){
        try{
            Usuario usuario = new UsuarioDAO().retrieve(pk);
            usuario.setSenha(new String(Codec.decodeBASE64(usuario.getSenha())));
            return usuario;
        }catch(Exception e){
            BoxPanel.showMessageDialog(null,"Usuário não encontrado");
            Funcoes.registrarLog(e);
        }
        return null;
    }

    public boolean delete(Usuario usuario){
        try{
            if(BoxPanel.showConfirmDialog(null, "Deseja realmente excluir o registro?") == 0){
                new UsuarioDAO().delete(usuario);
                return true;
            }
        }catch(Exception e){
            BoxPanel.showMessageDialog(null,"Não foi possível excluir Usuário.");
            Funcoes.registrarLog(e);
        }
        return false;
    }

    public List<Usuario> find(Usuario usuarioDTO){
        try{
            List<Usuario> usuarios = new UsuarioDAO().find(usuarioDTO);
            if(usuarios.size() > 0){
                return usuarios;
            }else{
                BoxPanel.showMessageDialog(null,"Usuário e Senha não conferem.");
            }
            
        }catch(Exception e){
            Funcoes.registrarLog(e);
        }
        return null;
    }

    public boolean alterarSenha(Usuario usuario) {
        try {
            new UsuarioDAO().save(usuario);
            return true;
        } catch (Exception ex) {
            BoxPanel.showMessageDialog(null,"Não foi possível alterar senha.");
            Funcoes.registrarLog(ex);
        }
        return false;
    }
}
